package com.ruoyi.system.service.aggregation;

/**
 * 商品库存缓存Service接口
 * 
 * @author ruoyi
 * @date 2025-01-13
 */
public interface IProductStockService
{
    /**
     * 初始化商品库存到Redis
     * 
     * @param productId 商品ID
     * @param stock 库存数量
     */
    void initStock(Long productId, Integer stock);
    
    /**
     * 扣减库存（原子操作）
     * 
     * @param productId 商品ID
     * @param quantity 扣减数量
     * @return 是否扣减成功
     */
    boolean decrStock(Long productId, Integer quantity);
    
    /**
     * 恢复库存（订单取消时）
     * 
     * @param productId 商品ID
     * @param quantity 恢复数量
     */
    void incrStock(Long productId, Integer quantity);
    
    /**
     * 获取Redis中的库存
     * 
     * @param productId 商品ID
     * @return 库存数量
     */
    Integer getStock(Long productId);
    
    /**
     * 同步Redis库存到数据库
     * 
     * @param productId 商品ID
     */
    void syncStockToDb(Long productId);
    
    /**
     * 同步所有库存到数据库（定时任务调用）
     */
    void syncAllStockToDb();
    
    /**
     * 从数据库加载库存到Redis
     * 
     * @param productId 商品ID
     */
    void loadStockFromDb(Long productId);
}

